#include <iostream>

using namespace std;




/*
有一个函数：
x<1时y=x
1<=x<=10时y=2x-1
x>=10时y=3*x-11 
编写程序，输入x，输出y。
*/
void Class9_1(void){
	int x;
	cin >> x;
	
	
	if(x<1){
		cout << x;
		return;
	}
	
	if(x>=1 && x<=10){
		cout << x*2-1;
		return;
	}
	
	if(x>=10){
		cout << x*3-11;
		return;
	}
	
	
} 

/*
2、从键盘上输入一个整数n的值，按下式求出y的值，并输出n和y的值（y用实数表示）：
y = 1！+ 2！+ 3！+ ... ... + n！
*/
void Class9_2(void){
	int n, y=0;
	int s=1;
	cin >> n;
	for(int i = 1; i <= n; i++){
		s*=i;
		y+= s;
		
	}
	
	cout << y << endl;
}






/*
1、打印出所有的“水仙花数“（
它是一个三位数，其各位数字立方和等于该数本身）。
*/ 
void Class10_1(void){
	int waterFlower;
	int hundreds;
	int tens;
	int ones;
	for(waterFlower=100;waterFlower<1000;waterFlower++){
		hundreds = waterFlower%1000/100;
		//tens = (waterFlower-(hundreds*100)) / 10;
		tens = waterFlower%100/10;
		ones = waterFlower%10;
		
		if(hundreds*hundreds*hundreds + tens*tens*tens + ones*ones*ones  == waterFlower)
			cout << waterFlower << endl;
	}
}


/*
2、输入一个正整数，按逆序输出。
例如，输入345，则输出543。
*/ 
void Class10_2(void){
	int posNum;
	
	cin >> posNum;
	
	
	int num=0;
	int n=posNum;
    while(n){
        num++;
        n/=10;
    }
	
	
	
	int i;
	int dev=10;
	for(i=0; i < num; i++){
		cout << posNum%dev/(dev/10);
		dev*=10;
	}
	
	
	
} 






/*
1、设计一个程序，要求输入三个整数，能求出最大数并输出。（必须用函数完成）
*/ 

void Class11_1(void){
	int a,b,c;
	cin >> a >> b >> c;
	if(a>b && a>c){
		cout << a;
		return;
	}
	if(b>a && b>c){
		cout << b;
		return;
	}
	if(c>b && c>a){
		cout << c;
		return;
	}
}




/*
2、设计一个程序，求出满足以下条件的最小的n值和s值。
            s = 1+2+3+...+n，且s>=600
*/

//注：该题有两个函数 ,调用Class11_2()即可 

int addPlus(int s){
	int sum = 0;
	for(int i = 0; i < s; i++){
		sum+=i;
		if(sum==s)	return 0;
	}
	
	return -1;
}

void Class11_2(void){
	int s=600;
	while(1){
		if(addPlus(s)==0){
			cout << s;
			return;
		}
		s++;
	}
}





/*
1、使用重载函数的方法定义两个函数，
用来分别求出两个整型数点之间的距离和两个实型数点之间距离。
两个整型点坐标分别为A(5,8),B(12,15)；
两个实型点坐标分别为C(1.5,5.2),D(3.7,4.6)。
*/
//此题目有两个同名函数
#include <math.h>
void Class13_1(int x1, int y1, int x2, int y2){
	double disX = x1 - x2;
	double disY = y1 - y2;
	double dis2 = disX*disX + disY*disY;
	double dis = sqrt(dis2);
	cout << dis;
} 

void Class13_1(double x1, double y1, double x2, double y2){
	double disX = x1 - x2;
	double disY = y1 - y2;
	double dis2 = disX*disX + disY*disY;
	double dis = sqrt(dis2);
	cout << dis;
} 




/*
2、使用递归函数求解并输出fibonacci数列的前十项。
*/

int fibo(int n){
	if(n==1 || n==2)	return 1;
	return fibo(n-1)+fibo(n-2);
}

void Class13_2(void){
	for(int i = 0; i < 10; i++){
		cout << fibo(i+1) << endl;
	}
}



/*
2、对输入的字符串进行简单加密处理，并输出加密后的字符串。
方法：首先建立一个长度为50的字符数组。随后通过输入流cin读入一个字符串。
加密的规则如下：对输入的字符进行判断，如果是数字或者字符，
则用其后的一个数字或者字母进行替换。但如果输入的字符是9，Z或者z，
则分别用0，A和a代替；如果输入的字符不是数字或者字母，则保持不变。
如输入的字符串为”09AZaz!”，则加密后输出的字符串为”10Baba!”。
*/
#include <string>
void Class15_2(void){
	string a;
	cin >> a;
	
	for(int i = 0; i < a.length(); i++){
		if(a[i] < 'z' && a[i] >= 'a')	a[i]++;
		if(a[i] < 'Z' && a[i] >= 'A')	a[i]++;
		if(a[i] < '9' && a[i] >= '0')	a[i]++;
		if(a[i]=='z' || a[i]=='Z')	a[i]-=25;
		if(a[i]=='9')	a[i]-=9;
	}
	
	for(int i = 0; i < a.length(); i++){
		cout << a[i];
	}
}






/*
	利用二分法查找15个从大道小排列的元素数组的下表 
	主函数操作代码置于LINK1注释中 
*/
int HalfFind(int arr[],int left,int right,int element){

	 while(left<=right)  
    {     
        int mid = (left+right)/2;  
        if(arr[mid]>element)  
        {  
        left = mid + 1;  
            
        }  
        else if(arr[mid]<element)  
        {  
            right = mid - 1;  
        }  
        else   
        {
            return mid;
        }  
    } 
    return -1;  
}


int main(void){
	return 0;
}